/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controller;
 
import Model.MovimientoM;
import MsSQL.ConMsSQL;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Maryluz
 */
public class MovimientoC {
    
    public List<MovimientoM> listarPrendasTaller() {
        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                List<MovimientoM> vctPrendas = new ArrayList<>();
                String sql = "select idmodelo,'0' as stock,nomModelo,precio from TBL_MODELO where stdModelo<>0";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setIdprenda(rs.getInt(1));
                        oM.setCantidad(rs.getInt(2));
                        oM.setNombrePrenda(rs.getString(3));
                        oM.setPrecio(rs.getDouble(4)); 
                        vctPrendas.add(oM);
                    }
                    return vctPrendas;
                }
                return null;
            } catch (SQLException e) {
                 System.out.print(e);
                return null;
            } catch (Exception e) {
                System.out.print(e);
                return null;
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return null;
    }
 
    public List<MovimientoM> listarPrendasTienda(int tienda) {
        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                List<MovimientoM> vctModelo = new ArrayList<>();
                String sql = "select  m.idmodelo,a.stock,(m.nomModelo) as modelo, m.precio  from dbo.TBL_MODELO m, TBL_ALMACEN a, TBL_TIENDA t  where m.idmodelo=a.idModelo and a.idTienda=t.idtienda and a.stock>0 and t.idtienda="+tienda+" and CONVERT(date,a.fecha)=convert(date,(select MAX(a1.fecha) from TBL_ALMACEN a1 where a1.idModelo=a.idModelo and a1.idTienda="+tienda+")) order by nomtienda, modelo";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setIdprenda(rs.getInt(1));
                        oM.setCantidad(rs.getInt(2));
                        oM.setNombrePrenda(rs.getString(3));
                        oM.setPrecio(rs.getInt(4)); 
                        vctModelo.add(oM);
                    }
                    return vctModelo;
                }
                return null;
            } catch (SQLException e) {
                // System.out.print(e);
                return null;
            } catch (Exception e) {
                //System.out.print(e);
                return null;
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return null;
    }
 
     public int buscarCodigo(String v) {

        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                String sql = "SELECT COUNT(*)FROM TBL_MOVIMIENTO WHERE idBloque='" + v + "' ";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setRecepciona(rs.getInt(1));
                        return oM.getRecepciona();
                    }
                }
                return 0;
            } catch (SQLException e) {
                 //System.out.print("Contar cod.Bloque: "+e);
            } catch (Exception e) {
                //System.out.print(e);
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return 0;
    }

    public boolean agregarMovimiento(MovimientoM ovM, String tipo) {

        Connection cnn = ConMsSQL.obtenerConexion();
        try {
            if (cnn != null) {
                String sql = "{call sp_addMovimiento(?,?,?,?,?,?,?,?,?)}";
                CallableStatement cs = cnn.prepareCall(sql);
                cs.setInt(1, ovM.getEmite());
                cs.setInt(2, ovM.getRecepciona());
                cs.setString(3, ovM.getTipoSalida());
                cs.setInt(4, ovM.getIdprenda());
                cs.setInt(5, ovM.getCantidad());
                cs.setString(6, tipo);
                cs.setString(7, ovM.getIdBloque());
                cs.setInt(8, ovM.getIdTiendaregistro());
                cs.setString(9, ovM.getFechaCompleta());
                ResultSet rs = cs.executeQuery();
                if (rs != null) {
                    while (rs.next()) {
                       return true;
                    }
                }
                return false;
            }
        } catch (Exception e) {
           // System.out.print(e);
          return false;
        }
        return false;
    }
    
        public List<MovimientoM> listarMovimientosBloque(String fecha) {
        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                List<MovimientoM> vctPrendas = new ArrayList<>();
                String sql = "SELECT distinct(m.idBloque),t1.nomtienda as emite,t2.nomtienda as recibe,m.tipoSalida ,(select COUNT(*) from TBL_MOVIMIENTO mo where mo.idBloque=m.idBloque) as modelo,  CONVERT(date,m.fecha) as fecha ,cONVERT(varchar,m.fecha, 108) as hora   FROM [SysReaDB].[dbo].[TBL_MOVIMIENTO] m,tbl_tienda t1, tbl_tienda t2, TBL_MODELO mo     where   t1.idtienda=m.idTiendaEmite and t2.idtienda=m.idTiendaRecepcion and mo.idmodelo=m.idmod and CONVERT(date,m.fecha)='"+fecha+"'  order by CONVERT(date,m.fecha) desc, CONVERT(varchar,m.fecha, 108) desc ";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setIdBloque(rs.getString(1));
                        oM.setNomEmite(rs.getString(2));
                        oM.setNomRecibe(rs.getString(3));
                        oM.setTipoSalida(rs.getString(4));
                        oM.setCantidad(rs.getInt(5));
                        oM.setFecha(rs.getString(6));
                        oM.setHora(rs.getString(7));
                        vctPrendas.add(oM);
                    }
                    return vctPrendas;
                }
                return null;
            } catch (SQLException e) {
                // System.out.print(e);
                return null;
            } catch (Exception e) {
                //System.out.print(e);
                return null;
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return null;
    }
 
    
    public List<MovimientoM> listarMovimientos(String idBloque) {
        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                List<MovimientoM> vctPrendas = new ArrayList<>();
                String sql = "SELECT m.idSalida,t1.nomtienda as emite,t2.nomtienda as recibe,m.tipoSalida,mo.nomModelo,[cantidad],CONVERT(varchar,m.fecha, 103) as fecha ,CONVERT(varchar,m.fecha, 108) as hora FROM [SysReaDB].[dbo].[TBL_MOVIMIENTO] m,tbl_tienda t1, tbl_tienda t2, TBL_MODELO mo  where  t1.idtienda=m.idTiendaEmite and t2.idtienda=m.idTiendaRecepcion and mo.idmodelo=m.idmod and m.idBloque='"+idBloque+"' order by m.fecha desc, CONVERT(varchar,m.fecha, 108) desc";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setIdsalida(rs.getInt(1));
                        oM.setNomEmite(rs.getString(2));
                        oM.setNomRecibe(rs.getString(3));
                        oM.setTipoSalida(rs.getString(4));
                        oM.setNomPrenda(rs.getString(5)); 
                        oM.setCantidad(rs.getInt(6));
                        oM.setFecha(rs.getString(7));
                        oM.setHora(rs.getString(8));
                        vctPrendas.add(oM);
                    }
                    return vctPrendas;
                }
                return null;
            } catch (SQLException e) {
                // System.out.print(e);
                return null;
            } catch (Exception e) {
               // System.out.print(e);
                return null;
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return null;
    }
 
    
    public List<MovimientoM> listarMovimientosTodo() {
        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                List<MovimientoM> vctPrendas = new ArrayList<>();
                String sql = "SELECT m.idSalida,t1.nomtienda as emite,t2.nomtienda as recibe,m.tipoSalida,mo.nomModelo,[cantidad],CONVERT(varchar,m.fecha, 103) as fecha ,CONVERT(varchar,m.fecha, 108) as hora FROM [SysReaDB].[dbo].[TBL_MOVIMIENTO] m,tbl_tienda t1, tbl_tienda t2, TBL_MODELO mo  where  t1.idtienda=m.idTiendaEmite and t2.idtienda=m.idTiendaRecepcion and mo.idmodelo=m.idmod order by m.fecha desc, CONVERT(varchar,m.fecha, 108) desc";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setIdsalida(rs.getInt(1));
                        oM.setNomEmite(rs.getString(2));
                        oM.setNomRecibe(rs.getString(3));
                        oM.setTipoSalida(rs.getString(4));
                        oM.setNomPrenda(rs.getString(5)); 
                        oM.setCantidad(rs.getInt(6));
                        oM.setFecha(rs.getString(7));
                        oM.setHora(rs.getString(8));
                        vctPrendas.add(oM);
                    }
                    return vctPrendas;
                }
                return null;
            } catch (SQLException e) {
               //  System.out.print(e);
                return null;
            } catch (Exception e) {
               // System.out.print(e);
                return null;
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return null;
    }
 
    public List<MovimientoM> listarMovimientosTodoBloque(int idTienda) {
        Connection conexion = ConMsSQL.obtenerConexion();
        if (conexion != null) {
            try {
                List<MovimientoM> vctPrendas = new ArrayList<>();
                String sql = "SELECT distinct(m.idBloque),t1.nomtienda as emite,t2.nomtienda as recibe,m.tipoSalida ,(select COUNT(*) from TBL_MOVIMIENTO mo where mo.idBloque=m.idBloque) as modelo,  CONVERT(date,m.fecha) as fecha ,cONVERT(varchar,m.fecha, 108) as hora   FROM [SysReaDB].[dbo].[TBL_MOVIMIENTO] m,tbl_tienda t1, tbl_tienda t2, TBL_MODELO mo  where   t1.idtienda=m.idTiendaEmite and t2.idtienda=m.idTiendaRecepcion and mo.idmodelo=m.idmod and idRegistroTienda="+idTienda+" order by CONVERT(date,m.fecha) desc, CONVERT(varchar,m.fecha, 108) desc ";

                Statement instruccionSQL = conexion.createStatement();
                ResultSet rs = instruccionSQL.executeQuery(sql);

                if (rs != null) {
                    while (rs.next()) {
                        MovimientoM oM = new MovimientoM();
                        oM.setIdBloque(rs.getString(1));
                        oM.setNomEmite(rs.getString(2));
                        oM.setNomRecibe(rs.getString(3));
                        oM.setTipoSalida(rs.getString(4));
                        oM.setCantidad(rs.getInt(5));
                        oM.setFecha(rs.getString(6));
                        oM.setHora(rs.getString(7));
                        vctPrendas.add(oM);
                    }
                    return vctPrendas;
                }
                return null;
            } catch (SQLException e) {
                 System.out.print(e);
                return null;
            } catch (Exception e) {
                System.out.print(e);
                return null;
            } finally {
                try {
                    conexion.close();
                } catch (SQLException ex) {
                    System.out.print("No se puede cerrar la conexion");
                }
            }
        }
        return null;
    }
 
}
